/**
 * 
 */
package com.workable.assignment.domain.themoviedb;

import java.io.Serializable;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.workable.assignment.utilities.StringUtil;

/**
 * @author npapadopoulos
 * 
 */
public class TMDBMovieDetails extends TMDBStatus implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = 515126481907445450L;

	private boolean adult;

	@JsonProperty(value = "backdrop_path")
	private String backdropPath;

	@JsonProperty(value = "belongs_to_collection")
	private TMDBMovieCollection belongsToCollection;

	private Long budget;

	private List<TMDBMovieGenre> genres;

	private String homepage;
	private long id;

	@JsonProperty(value = "imdb_id")
	private String imdbId;

	@JsonProperty(value = "original_title")
	private String originalTitle;

	private String overview;

	private float popularity;

	@JsonProperty(value = "poster_path")
	private String posterPath;

	@JsonProperty(value = "production_companies")
	private List<TMDBMovieProductionCompany> productionCompanies;

	@JsonProperty(value = "production_countries")
	private List<TMDBMovieProductionCountry> productionCountries;

	@JsonProperty(value = "release_date")
	private String releaseDate;

	private int revenue;

	private int runtime;

	@JsonProperty(value = "spoken_languages")
	private List<TMDBMovieSpokenLanguage> spokenLanguages;

	private String status;

	private String tagline;

	private String title;

	@JsonProperty(value = "vote_average")
	private float voteAverage;

	@JsonProperty(value = "vote_count")
	private int voteCount;

	public boolean isAdult() {
		return adult;
	}

	public void setAdult(boolean adult) {
		this.adult = adult;
	}

	public String getBackdropPath() {
		return backdropPath;
	}

	public void setBackdropPath(String backdropPath) {
		this.backdropPath = backdropPath;
	}

	public TMDBMovieCollection getBelongsToCollection() {
		return belongsToCollection;
	}

	public void setBelongsToCollection(TMDBMovieCollection belongsToCollection) {
		this.belongsToCollection = belongsToCollection;
	}

	public Long getBudget() {
		return budget;
	}

	public void setBudget(Long budget) {
		this.budget = budget;
	}

	public List<TMDBMovieGenre> getGenres() {
		return genres;
	}

	public void setGenres(List<TMDBMovieGenre> genres) {
		this.genres = genres;
	}

	public String getHomepage() {
		return homepage;
	}

	public void setHomepage(String homepage) {
		this.homepage = homepage;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getImdbId() {
		return imdbId;
	}

	public void setImdbId(String imdbId) {
		this.imdbId = imdbId;
	}

	public String getOriginalTitle() {
		return originalTitle;
	}

	public void setOriginalTitle(String originalTitle) {
		this.originalTitle = originalTitle;
	}

	public String getOverview() {
		return overview;
	}

	public void setOverview(String overview) {
		this.overview = overview;
	}

	public float getPopularity() {
		return popularity;
	}

	public void setPopularity(float popularity) {
		this.popularity = popularity;
	}

	public String getPosterPath() {
		return posterPath;
	}

	public void setPosterPath(String posterPath) {
		this.posterPath = posterPath;
	}

	public List<TMDBMovieProductionCompany> getProductionCompanies() {
		return productionCompanies;
	}

	public void setProductionCompanies(List<TMDBMovieProductionCompany> productionCompanies) {
		this.productionCompanies = productionCompanies;
	}

	public List<TMDBMovieProductionCountry> getProductionCountries() {
		return productionCountries;
	}

	public void setProductionCountries(List<TMDBMovieProductionCountry> productionCountries) {
		this.productionCountries = productionCountries;
	}

	public String getReleaseDate() {
		return releaseDate;
	}

	public void setReleaseDate(String releaseDate) {
		this.releaseDate = releaseDate;
	}

	public int getRevenue() {
		return revenue;
	}

	public void setRevenue(int revenue) {
		this.revenue = revenue;
	}

	public int getRuntime() {
		return runtime;
	}

	public void setRuntime(int runtime) {
		this.runtime = runtime;
	}

	public List<TMDBMovieSpokenLanguage> getSpokenLanguages() {
		return spokenLanguages;
	}

	public void setSpokenLanguages(List<TMDBMovieSpokenLanguage> spokenLanguages) {
		this.spokenLanguages = spokenLanguages;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getTagline() {
		return tagline;
	}

	public void setTagline(String tagline) {
		this.tagline = tagline;
	}

	/**
	 * @return the title
	 */
	public String getTitle() {
		return title;
	}

	/**
	 * @param title
	 *            the title to set
	 */
	public void setTitle(String title) {
		this.title = title;
	}

	public float getVoteAverage() {
		return voteAverage;
	}

	public void setVoteAverage(float voteAverage) {
		this.voteAverage = voteAverage;
	}

	public int getVoteCount() {
		return voteCount;
	}

	public void setVoteCount(int voteCount) {
		this.voteCount = voteCount;
	}

}

class TMDBMovieGenre implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = 4921519029117596750L;
	/**
     * 
     */

	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return StringUtil.toString(this);
	}
}

class TMDBMovieProductionCountry implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = -8981959014841337113L;
	/**
     * 
     */
	private String iso_3166_1;
	private String name;

	public String getIso_3166_1() {
		return iso_3166_1;
	}

	public void setIso_3166_1(String iso_3166_1) {
		this.iso_3166_1 = iso_3166_1;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return StringUtil.toString(this);
	}
}

class TMDBMovieProductionCompany implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = -981078826698266599L;
	/**
     * 
     */

	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return StringUtil.toString(this);
	}
}

class TMDBMovieSpokenLanguage implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = 1918193779610058177L;
	/**
     * 
     */

	private String iso_639_1;
	private String name;

	public String getIso_639_1() {
		return iso_639_1;
	}

	public void setIso_639_1(String iso_639_1) {
		this.iso_639_1 = iso_639_1;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return StringUtil.toString(this);
	}
}

class TMDBMovieCollection implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = 9026369752602903181L;
	/**
     * 
     */

	private int id;
	private String name;

	@JsonProperty(value = "poster_path")
	private String posterPath;

	@JsonProperty(value = "backdrop_path")
	private String backdropPath;

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name
	 *            the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the posterPath
	 */
	public String getPosterPath() {
		return posterPath;
	}

	/**
	 * @param posterPath
	 *            the posterPath to set
	 */
	public void setPosterPath(String posterPath) {
		this.posterPath = posterPath;
	}

	/**
	 * @return the backdropPath
	 */
	public String getBackdropPath() {
		return backdropPath;
	}

	/**
	 * @param backdropPath
	 *            the backdropPath to set
	 */
	public void setBackdropPath(String backdropPath) {
		this.backdropPath = backdropPath;
	}

	@Override
	public String toString() {
		return StringUtil.toString(this);
	}
}